package com.gdones.generate;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

/**
 * 模块名称： MP-代码生成器
 * 模块类型：
 * 编码人：高靖博
 * 创建时间：2023/3/2
 * 联系电话：18587388612
 */
public class MP_Generator {

    private MP_Generator(){}

    private final static String URL = "jdbc:mysql://173.82.227.246:3306/gdones_gpt?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
    private final static String USER_NAME = "gdonesgpt";
    private final static String PWD = "cxk666";

    private final static String AUTHOR = "GaoJingBo";// 每个类头部声明的作者
    private final static String OUT_PUT_DIR = "D://mybatis"; //输出的目录
    private final static String PARENT_PACKAGE_NAME = "com.gdones.gpt.bus"; //根包路径
    private final static String PARENT_MODEL_NAME = "notice";//模块名
    private final static String [] TABLE_NAME = {"t_gpt_notice"};// 生成业务逻辑的表
    private final static String PREFIX = "t_";// 去除的前缀

    public static void main(String[] args) {

        FastAutoGenerator.create(URL, USER_NAME, PWD)
                .globalConfig(builder -> {
                    builder.author(AUTHOR) // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .dateType(DateType.ONLY_DATE) // 日期类型
                            .commentDate("yyyy-MM-dd") //公共默认日期格式
                            .outputDir(OUT_PUT_DIR); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent(PARENT_PACKAGE_NAME) //设置父路径根包
                            .moduleName(PARENT_MODEL_NAME) //设置模块名称
                            .entity("dto") //dto实体
                            .service("service") //业务接口
                            .serviceImpl("service.impl") //业务实现
                            .mapper("mapper") //mybatis-plus-mapper接口
                            .xml("mapper") ////mybatis-plus-mapper接口映射xml
                            .controller("controller") //控制器
                            .other("other");
                })
                .strategyConfig(builder -> {
                    builder.controllerBuilder()// 控制器类生成配置
                            .enableHyphenStyle() // 按照驼峰规则生成类名
                            .enableRestStyle(); // controller头部会使用@RestController
                    builder.mapperBuilder() // mapper接口文件生成配置
                            .enableMapperAnnotation(); // 接口上添加@Mapper注解
                    builder.entityBuilder() // 构建数据库实体类生成配置
                            .enableLombok() // 类头部添加@Data注解
                            .logicDeleteColumnName("isDelete")// 逻辑删除表字段名
                            .logicDeletePropertyName("isDelete")// 逻辑删除实体属性名
                            // 添加填充规则
                            .addTableFills(new Column("insertTime", FieldFill.INSERT))
                            .addTableFills(new Column("updateTime", FieldFill.INSERT_UPDATE))
                            .idType(IdType.ASSIGN_UUID);
                    builder.addInclude(TABLE_NAME) // 设置需要生成的表名
                            .enableSkipView()//跳过视图
                            .addTablePrefix(PREFIX); // 设置过滤表前缀

                })

                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();//进行生成

    }

}
